#include<set>
#include<map>
#include<utility>
#include<iostream>
#include<algorithm>

using namespace std;

void testset1()
{
    set<int> s;
    s.insert(6);
    s.insert(7);
    s.insert(1);
    s.insert(3);
    s.insert(1);
    s.insert(3);
    s.insert(4);
    s.insert(5);

    set<int>::iterator sit = s.begin();

    while (sit != s.end())
    {
        cout << (*sit) << " ";
        sit++;
    }
    cout << endl;
    
    //set<int>::iterator it = find(s.begin(),s.end(),3);//调用算法库的方法（暴力查找-O（N））
    set<int>::iterator it = s.find(3);//set中提供的方法，底层是搜索二叉树的结构（O（logN））
    
}   

void test_set2()
{
    multiset<int> ms;
    ms.insert(3);
    ms.insert(9);
    ms.insert(3);
    ms.insert(1);
    ms.insert(7);
    ms.insert(5);
    ms.insert(3);
    ms.insert(3);

    multiset<int> :: iterator mit = ms.begin();
    while(mit != ms.end())
    {
        cout << *mit << " ";
        mit++;
    }
    cout << endl;
    
    pair<multiset<int>::iterator,multiset<int>::iterator> msp1 = ms.equal_range(3);
    ms.erase(msp1.first,msp1.second);
    for(auto &e : ms)
    {
        cout << e << " ";
    }
    cout << endl;

}
void test_set3()
{
    set<int> set;
    set.insert(3);
    set.insert(1);
    set.insert(6);
    set.insert(9);
    set.insert(5);
    set.insert(11);
    set.insert(23);
    set.insert(4);
    set.insert(2);
    for(auto &e : set)
    {
        cout << e << " ";
    }
    cout << endl;

    auto lowit = set.lower_bound(3);
    auto upit = set.upper_bound(6);
    set.erase(lowit,upit);
    
    for(auto &e : set)
    {
        cout << e << " ";
    }
    cout << endl;
}

void test_map1()
{
    map<string,string> dict;
    pair<string,string> kv("insert","插入");
    dict.insert(kv);

    //c++ 98
    dict.insert(make_pair("sort","排序"));

    //c++ 11
    dict.insert({"erase","删除"});
    
    //隐式类型转化
    string str = "hello";
    pair<string,string> kv1 = {"hello","你好"};

    for(auto &e : dict)
    {
        cout << e.first << " : " << e.second;
        cout << endl;
    }
}

int main()
{
    //testset1();
    //test_set2();
    //test_set3();
    test_map1();
    return 0;
}   